# -*- coding: UTF-8 -*-
"""
@项目名称：rmq_graphdta.py
@作   者：陆地起飞全靠浪
@创建日期：2025-09-16-15:16
"""
import time
from rabbit_mq.rmq_utiltools import get_rmq_connection, pika
from rabbit_mq.rmq_config import logger


class GraphDTA():
    @staticmethod
    def test_graph_dta(json_dumps='{"xx": 6, "yy": "对对对"}'):
        # 发送消息,要发送消息，首先需要建立与RabbitMQ服务器的连接，然后创建一个队列，并通过交换器发送消息。以下是一个简单的生产者示例：
        connection, channel = get_rmq_connection()
        # 声明队列
        channel.queue_declare(queue='graph_dta', durable=True)  # durable重启后队列仍然存在
        # 发送消息
        properties = pika.BasicProperties(delivery_mode=2)  # delivery_mode=2 (设置 1为不持久化 ; 设置 2为持久化,重启后消息仍然存在)
        channel.basic_publish(exchange='', routing_key='graph_dta', body=json_dumps, properties=properties)
        logger.info(f" [x] Sent '{json_dumps}'")
        # 关闭连接
        connection.close()

    def test_basic_consume(self):
        # 接收消息:接收消息涉及到订阅队列并注册一个回调函数，当消息到达时，Pika库会调用这个函数。以下是一个简单的消费者示例：
        def callback(ch, method, properties, body):
            print(f" [x] Received {body}")
            time.sleep(10)
            print(f'5秒结束，验证队列依次执行：{body}')

        # 连接到RabbitMQ服务器
        connection, channel = get_rmq_connection()
        # 声明队列
        channel.queue_declare(queue='graph_csv2pt', durable=True)
        # 订阅队列
        channel.basic_consume(queue='graph_csv2pt', auto_ack=True, on_message_callback=callback)
        print(' [*] Waiting for messages. To exit press CTRL+C')
        channel.start_consuming()  # 开始消费消息
